package models.dados;

import java.sql.SQLException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

import models.*;

public interface DAO {
	
	
	
	Cliente getClienteCadastrado(String nomeUsuario) throws DadoNaoEncontradoException;
	Cliente getClienteNaoCadastrado(String nome)throws DadoNaoEncontradoException;
	Administrador getAdministrador(String nomeUsuario)throws DadoNaoEncontradoException, SQLException;
	Pedido getPedido(long numero)throws DadoNaoEncontradoException;
	Produto getProduto(String nome)throws DadoNaoEncontradoException;
	
	
	void inserirCliente(Cliente cliente) throws ChaveRepetidaException;
	void inserirPedido (Pedido pedido) throws ChaveRepetidaException;
	void inserirAdministrador(Administrador administrador) throws ChaveRepetidaException, SQLException;
	void inserir (Produto donut) throws ChaveRepetidaException, SQLException;
	
	void removerCliente(String nomeUsuario) throws DadoNaoEncontradoException;
	void removerPedido(Pedido pedido) throws DadoNaoEncontradoException;
	void removerAdministrador(String nomeUsuario) throws DadoNaoEncontradoException;
	void removerProduto(String tipo, String marca, String nome) throws DadoNaoEncontradoException;
	void removerProduto(String nome);
	
	void alterarCliente(Cliente cliente);
	void alterarPedido(Pedido pedido);
	void alterarAdministrador(Administrador administrador);
	void alterarProduto(Produto produto);
	
	List<Cliente> listarClientes(String nomeUsuario,String nome,Calendar dataCadastro,Calendar dataCadastroInicial,Calendar dataCadastroFinal,boolean bloqueado,boolean naobloqueado,boolean ehCadastrado,boolean naoCadastrado);
	List<Administrador> listarAdministradores(String usuario,TipoUsuario tipo,String cadastradoPor,Calendar DataCadastro,boolean bloqueado,boolean naoBloqueado,boolean ativo,boolean inativo);
	List<Produto> listarProdutos() throws SQLException;
	
	List<Pedido> listarPedidos(long numero,String usuarioCliente,String nome,GregorianCalendar DataExata,GregorianCalendar dataInicial,
			GregorianCalendar dataFinal,String status,String usuarioUltimaAlteracao,GregorianCalendar dataUltimaAteracao);
	
	List<Produto> listarProdutos(String tipo);
	
	

}
